﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaProyectoDidacticoViewModel
    {

        public event EditarEntidad EditarEntidad;

        private RelayCommand findCommand;
        private RelayCommand editCommand;
        private RelayCommand eliminarProyectoCommand;
        private string nombre;
        private Guid idSeleccionado;

        private VentanaBusquedaProyectoDidactico view;

        public List<ViewEntity> ListaProyectos { get; set; }


        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }

        }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }

        }

        public ICommand FindCommand
        {
            get
            {
                return findCommand;
            }
        }

        public ICommand EditCommand
        {
            get
            {
                return editCommand;
            }
        }

        public ICommand EliminarProyectoCommand
        {
            get
            {
                return eliminarProyectoCommand;
            }
        }


        public VentanaBusquedaProyectoDidacticoViewModel() {}

        public VentanaBusquedaProyectoDidacticoViewModel(VentanaBusquedaProyectoDidactico vista)
        {
            this.view = vista;
            this.findCommand = new RelayCommand(BuscarProyectoDidactico);
            this.editCommand = new RelayCommand(EditarProyectoDidactico);

        }

        public VentanaBusquedaProyectoDidacticoViewModel(VentanaBusquedaProyectoDidactico vista, string eliminar)
        {
            this.view = vista;
            this.findCommand = new RelayCommand(BuscarProyectoDidactico);
            this.eliminarProyectoCommand = new RelayCommand(EliminarProyectoDidactico);
            this.view.btnEditar.Visibility = Visibility.Collapsed;
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.titulo.Content = "Eliminar Proyecto didáctico";

        }

        private void BuscarProyectoDidactico(Object parameter)
        {

            if (nombre == null || nombre == "")
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Nombre del proyecto' no puede estar vacío");
                nueva.ShowDialog();

            }
            else
            {
                view.Cursor = Cursors.Wait;
                ListaProyectos = new ProyectoDidacticoLogica().ObtenerCoincidenciasAEditarPorNombre(nombre);

                if (ListaProyectos != null && ListaProyectos.Count > 0)
                {
                    this.view.listaDatos.ItemsSource = ListaProyectos;
                    this.view.panelResultados.Visibility = Visibility.Visible;
                    this.view.lblProyectoDidacticoNoRecords.Visibility = Visibility.Collapsed;
                    this.view.lblProyectoNoSelected.Visibility = Visibility.Collapsed;                 
                }
                else
                {
                    this.view.panelResultados.Visibility = Visibility.Collapsed;
                    this.view.lblProyectoDidacticoNoRecords.Visibility = Visibility.Visible;
                    
                }
                view.Cursor = Cursors.Arrow;
            }


        }

        public void EditarProyectoDidactico(Object parameter)
        {

            if (this.idSeleccionado != Guid.Empty)
            {
                this.view.lblProyectoNoSelected.Visibility = Visibility.Collapsed;

                ProyectoDidactico entidad = new ProyectoDidacticoLogica().ObtenerEntidadParaEditar(idSeleccionado);
                this.EditarEntidad(CasosDeUso.NuevoProyectoDidactico, entidad);
                this.view.Close();

            }
            else
            {
                this.view.lblProyectoNoSelected.Visibility = Visibility.Visible;
            }

        }

        public void EliminarProyectoDidactico(Object parameter)
        {

            if (this.idSeleccionado != Guid.Empty)
            {
                if (MessageBox.Show("¿Está seguro que desea eliminar los datos del proyecto didáctico seleccionado?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                {
                    this.view.lblProyectoNoSelected.Visibility = Visibility.Collapsed;

                    ProyectoDidactico entidad = new ProyectoDidacticoLogica().ObtenerEntidadParaEditar(idSeleccionado);

                    if (!new PlanificacionProyectoDidacticoLogica().EstaAsignadoPlanificacion(entidad.IdProyectoDidactico))
                    {


                        entidad.Eliminado = true;
                        new ProyectoDidacticoLogica().Modificar(entidad);

                        VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "El proyecto didáctico seleccionado ha sido eliminado");
                        nueva.ShowDialog();

                        this.view.Close();

                    }
                    else
                    {
                        VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El proyecto didáctico está asignado a una planificación");
                        nueva.ShowDialog();

                    }
                }
            }
            else
            {
                this.view.lblProyectoNoSelected.Visibility = Visibility.Visible;
            }

        }



    }
}
